#ifndef TVM_MEMORY_H_
#define TVM_MEMORY_H_

#include <stdint.h>
#include <stddef.h>

#define MIN_MEMORY_SIZE (64 * 1024 * 1024) /* 64 MB */

union tvm_reg_u
{
    int32_t i32;
    int32_t *i32_ptr;

    union
    {
        int16_t h; // 高位
        int16_t l; // 低位
    } i16;
};

struct tvm_mem
{
    /*
	 *	Similar to x86 FLAGS register
	 *
	 *	0x1	EQUAL
	 *	0x2	GREATER
	 *
	 */

    int FLAGS;
    int remainder; // 余数

    void *mem_space;    // 地址空间指针
    int mem_space_size; // 地址大小

    union tvm_reg_u *registers; // 寄存器
};

struct tvm_mem *tvm_mem_create(size_t size);
void tvm_mem_destroy(struct tvm_mem *mem);

#endif
